package com.zhangxu.microservice.auth.biz.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zhangxu.microservice.auth.biz.dto.CreateResourceDTO;
import com.zhangxu.microservice.auth.biz.dto.ResourceDTO;
import com.zhangxu.microservice.auth.biz.dto.UpdateResourceDTO;
import com.zhangxu.microservice.auth.dao.condition.ResourceCondition;

import java.util.List;

/**
 * 资源服务接口
 */
public interface ResourceService {

    /**
     * 创建资源
     *
     * @param createResourceDTO 创建资源DTO
     * @return 资源ID
     */
    Long createResource(CreateResourceDTO createResourceDTO);

    /**
     * 更新资源
     *
     * @param updateResourceDTO 更新资源DTO
     */
    void updateResource(UpdateResourceDTO updateResourceDTO);

    /**
     * 删除资源
     *
     * @param resourceId 资源ID
     */
    void deleteResource(Long resourceId);

    /**
     * 启用资源
     *
     * @param resourceId 资源ID
     */
    void enableResource(Long resourceId);

    /**
     * 禁用资源
     *
     * @param resourceId 资源ID
     */
    void disableResource(Long resourceId);

    /**
     * 根据ID获取资源
     *
     * @param resourceId 资源ID
     * @return 资源DTO
     */
    ResourceDTO getResourceById(Long resourceId);

    /**
     * 根据编码获取资源
     *
     * @param code 资源编码
     * @param systemId 系统ID
     * @return 资源DTO
     */
    ResourceDTO getResourceByCode(String code, Long systemId);

    /**
     * 根据系统ID获取资源列表
     *
     * @param systemId 系统ID
     * @return 资源DTO列表
     */
    List<ResourceDTO> getResourcesBySystemId(Long systemId);

    /**
     * 根据父ID获取子资源列表
     *
     * @param parentId 父资源ID
     * @return 子资源DTO列表
     */
    List<ResourceDTO> getResourcesByParentId(Long parentId);

    /**
     * 分页查询资源
     *
     * @param condition 查询条件
     * @return 资源DTO分页结果
     */
    IPage<ResourceDTO> resourcePage(ResourceCondition condition);
}